package com.itbaizhan.mapper2;

import com.itbaizhan.pojo.User;
import com.itbaizhan.pojo.Users;
import com.itbaizhan.provider.ProviderUser;
import org.apache.ibatis.annotations.*;

import java.util.List;

/*自定义映射关系*/
public interface UsersMapper2 {
    /*用于分页查询*/
    @Select("select * from user")
    List<User> findAll2();

    /*自定义的实体类中的属性名与表中的名不同，需要自定义映射关系
     * property: 实体类的属性名  column:表中的列名*/
    @Results(id = "usersmapper",value = {
            @Result(id=true,property = "id",column ="userid"),
            @Result(property = "name",column = "username"),
            @Result(property = "age",column = "userage")
    })
    @Select("select * from users")
    List<Users> findAll();

    /*主键回填*/
    @SelectKey(keyProperty = "id",keyColumn = "id",resultType = int.class,before = false,statement = "SELECT LAST_INSERT_ID()")
    @Insert("insert into user(username,sex,address) values(#{username},#{sex},#{address})")
    void insertUser(User user);

    /*动态sql语句
    方法一;
    * 使用脚本标签
   将Sql嵌套在<script>内即可使用动态Sql标签
   * 一般是在映射文件中写好sql语句 再复制过来  在script 的加号后 加“ ”  在双引号里粘贴 */
    //   @Select("<script>"+"select * from user  where 1=1\n" +
    //          "    <if test=\"username != null and username.length() != 0\">\n" +
//            "    /*这里是模糊查询*/\n" +
    //          "      and username like #{username}\n" +
//            "    </if>\n" +
//            "    <if test=\"sex != null and sex.length() != 0\">\n" +
//            "        and sex = #{sex}\n" +
    //           "    </if>\n" +
    //           "     <if test=\"address != null and address.length() != 0\">\n" +
//            "         and address = #{address}\n" +
//            "     </if>"+
//            "</script>")
//    List<User> findByCondition(User user);

    /*方法二
     * 在MyBatis中有@SelectProvider、@UpdateProvider、@DeleteProvider、@InsertProvider注解。
     * 当使用这些注解时将不在注解中直接编写SQL，而是调用某个类的方法来生成SQL。
     * type: 调用类   method:调用类中的方法*/
    @SelectProvider(type = ProviderUser.class,method = "findByConditionSql")
    List<User> findByCondition(User user);


}
